5.02. Python
О языке
Что такое Python?
Python — это высокоуровневый, интерпретируемый, динамически типизированный язык программирования общего назначения. С момента своего появления он стал одним из наиболее влиятельных языков в современной разработке программного обеспечения, нашедшим применение от системного скриптинга до машинного обучения и веб-разработки.
Интерпретируемый язык
Python является интерпретируемым языком, что означает: исходный код не компилируется заранее в машинный код, а выполняется построчно (или блоками) специальным интерпретатором во время запуска программы.
Компилируемые языки (например, C, C++, Rust, Go) требуют предварительного этапа — компиляции: весь исходный код анализируется, проверяется на соответствие синтаксису и семантике, и затем транслируется в машинный код (или промежуточное представление, как в случае C# → IL). Только после успешного завершения этого этапа создаётся исполняемый файл, который можно запустить. Любая синтаксическая или типовая ошибка на этапе компиляции приводит к отказу в генерации исполняемого модуля — программа не запускается вовсе.
Интерпретируемые языки (например, Python, JavaScript в браузере, Ruby) не проходят отдельного этапа компиляции перед запуском. Вместо этого специальная программа — интерпретатор — считывает исходный код и выполняет его инструкции последовательно, по мере чтения. Это означает, что синтаксическая ошибка, встречающаяся внутри программы, не препятствует выполнению предшествующих корректных строк. Интерпретатор остановится только в момент обнаружения ошибки, сохранив уже произведённые эффекты.
print("Строка 1 выполнена")
print("Строка 2 выполнена")
print(1 / 0) # Ошибка времени выполнения: деление на ноль
print("Строка 4 — не будет достигнута")
При запуске интерпретатор выполнит первые два print, лишь затем обнаружит невозможность вычисления 1 / 0 и прервёт выполнение с исключением ZeroDivisionError. Строка 4 не будет достигнута.
Аналогичный эффект наблюдается и при синтаксической ошибке:
print("Строка 1 выполнена")
print("Строка 2 выполнена")
print("Не закрытая кавычка # <-- синтаксическая ошибка
print("Строка 4")
Интерпретатор Python выполнит первые две строки, и только при попытке разобрать третью — остановится с SyntaxError. В компилируемом же языке такая ошибка не позволила бы даже начать выполнение программы: этап анализа завершился бы неудачей ещё до генерации исполняемого кода.
На практике этот процесс включает несколько этапов:
- Лексический анализ — преобразование исходного кода в последовательность токенов.
- Синтаксический анализ — построение абстрактного синтаксического дерева (AST).
- Компиляция в байткод — генерация платформо-независимого промежуточного представления, хранящегося в файлах .pyc.
- Интерпретация байткода — выполнение на виртуальной машине CPython (PVM — Python Virtual Machine).
Такой подход позволяет достигать высокой степени переносимости: один и тот же код может выполняться на любой платформе, где установлен совместимый интерпретатор. Однако за это приходится платить снижением производительности по сравнению с компилируемыми языками, такими как C или Rust.
Важно отметить, что хотя Python часто называют «интерпретируемым», его реализация всё же включает элементы компиляции — именно поэтому корректнее говорить о гибридной модели исполнения: сначала компиляция в байткод, затем интерпретация. Но, в большинстве учебников мы увидим именно указание как «интерпретируемый», так что будем считать таковым.
Ввод и вывод
Первые команды, с которыми начинает работать любой обучающийся этому языку программирования - это print() и input() - буквально "ввод" и "вывод":
print(x)- функция, выводящая значениеxв терминале;input()- функция для считывания того, то введёт пользователь в консоли.
К примеру, мы можем спросить у пользователя его имя, и вывести в составе предложения:
name = input("Как тебя зовут? ")
print("Привет, " + name + "! Ты молодец!")
Здесь name - переменная, куда мы и записываем результат выполнения функции input(). В переменную можно записывать значения напрямую без указания конкретного типа.
Python реализует динамическую типизацию, что означает: тип переменной определяется во время выполнения программы на основании значения, присвоенного переменной, а не указывается явно в её объявлении.
x = 5 # x имеет тип int
x = "hello" # теперь x имеет тип str
Эта особенность значительно ускоряет процесс написания кода и делает его более лаконичным. Однако она также перекладывает ответственность за проверку типов на разработчика и инструменты анализа кода. В отличие от строгих статических систем (например, в Java или TypeScript), Python не предотвращает ошибки типизации на этапе компиляции.
Типизация
Python обладает сильной типизацией, то есть не допускает автоматические неявные преобразования между несовместимыми типами. Например, выражение 5 + "3" вызовет исключение TypeError, поскольку операция сложения между числом и строкой не определена.
Для тех случаев, когда требуется контроль типов, начиная с версии 3.5, Python поддерживает аннотации типов (typing module), позволяя использовать статические анализаторы (например, mypy) для проверки кода вне времени выполнения.
Мультипарадигменность
Одним из ключевых преимуществ Python является его мультипарадигменная природа. Вы можете использовать различные парадигмы программирования в рамках одного проекта:
- Процедурное программирование — организация кода в виде последовательности функций и инструкций.
- Объектно-ориентированное программирование (ООП) — моделирование системы через классы и объекты, поддерживаются инкапсуляция, наследование, полиморфизм.
- Функциональное программирование — использование чистых функций, передача функций как объектов первого класса, работа с map, filter, reduce, lambda, а также позднее добавление поддержки неизменяемых структур и декораторов.
- Аспектно-ориентированное и метапрограммирование — через метаклассы, декораторы и дескрипторы.
Такая гибкость позволяет выбирать наиболее подходящий стиль в зависимости от задачи. Например, для математических вычислений удобны функциональные конструкции, а для моделирования бизнес-логики — ООП.
Популярность Python объясняется сочетанием нескольких факторов, каждый из которых играет важную роль в формировании экосистемы и привлечении разработчиков.
Простота синтаксиса
Синтаксис Python минималистичен и близок к псевдокоду. Отсутствие фигурных скобок, обязательное использование отступов для обозначения блоков кода, лаконичные конструкции (with, for, if) — всё это способствует высокой читаемости.
if user.is_active and user.has_permission:
send_notification(user)
Код легко читается даже теми, кто не владеет языком, что соответствует принципу Дзена Python: «Читаемость имеет значение».
Кроссплатформенность
Python доступен практически на всех современных платформах: Windows, macOS, Linux, а также на мобильных и встраиваемых системах. Интерпретатор можно запустить в контейнере, на сервере, в облаке или даже в браузере (через Pyodide). Это делает Python идеальным выбором для создания портируемых решений.
Широкая стандартная библиотека и экосистема
Python поставляется с обширной стандартной библиотекой (часто называемой «batteries included»), включающей модули для работы с файлами (os, pathlib), сетью (http, socket), датами (datetime), сериализацией (json, pickle), многопоточностью (threading, asyncio) и многим другим.
Помимо этого, менеджер пакетов pip предоставляет доступ к PyPI (Python Package Index) — крупнейшему репозиторию сторонних библиотек. На момент 2025 года в нём содержится более 500 тысяч пакетов, покрывающих практически любую предметную область: от requests и flask до numpy, pandas, scikit-learn и tensorflow.
Поддержка разных стилей программирования
Как уже упоминалось, Python не навязывает единственный стиль разработки. Разработчик может выбирать между функциональным, объектно-ориентированным или процедурным подходом. Это делает язык универсальным: он подходит как для быстрой прототипизации, так и для проектирования масштабируемых систем.
Python предоставляет мощный интерактивный режим, известный как REPL (Read-Eval-Print Loop). Он позволяет выполнять команды по одной, немедленно видеть результат и экспериментировать с кодом без необходимости создавать файлы. Современные инструменты, такие как IPython и Jupyter Notebook, расширяют возможности REPL, добавляя подсветку, автодополнение, визуализацию и запись сессий.
Структура скрипта
Давайте рассмотрим структуру простого скрипта. Простейший скрипт на Python представляет собой последовательность инструкций, сохранённых в файле с расширением .py. Рассмотрим базовую структуру:
#!/usr/bin/env python3
"""
Модуль: hello.py
Автор: Иван Петров
Описание: Простой пример вывода сообщения.
"""
# Импорт необходимых модулей
import sys
# Определение констант
GREETING = "Привет, мир!"
# Основная логика
def main():
print(GREETING)
return 0
# Точка входа
if __name__ == "__main__":
sys.exit(main())
Этот шаблон включает:
- Шебанг (#!) — указание интерпретатора (для Unix-систем),
- Docstring — документация модуля,
- Импорты — подключение внешних зависимостей,
- Константы и данные,
- Функции и классы,
- Точку входа — условие
if __name__ == "__main__", которое гарантирует, что код будет выполнен только при прямом запуске, а не при импорте как модуля.
Такая структура способствует созданию модульного, тестируемого и повторно используемого кода.
Применение Python
Где применяется Python?
Веб-разработка
Python используется для создания серверной части (backend) веб-приложений, API, микросервисов и полноценных веб-платформ.
| Фреймворк | Тип | Особенности | Типичное применение |
|---|---|---|---|
| Django | Полнофункциональный | Встроенный ORM, админ-панель, аутентификация, маршрутизация | Крупные веб-платформы, социальные сети, контент-менеджмент |
| Flask | Микрофреймворк | Минималистичный, гибкая архитектура, расширения по необходимости | Лёгкие API, прототипы, микросервисы |
| FastAPI | Современный | Асинхронность, автоматическая документация OpenAPI, строгая типизация | Высоконагруженные API, микросервисная архитектура |
В веб-разработке типичными задачами являются создание RESTful и GraphQL API, разработка веб-сервисов и микросервисов, интеграция с базами данных, и работа с аутентификацией. К примеру, Instagram использует Django как основу своего backend, обрабатывая миллионы запросов в секунду.
Data Science и анализ данных
Python можно назвать стандартом в аналитике и научных вычислениях благодаря удобным инструментам для работы с данными.
| Библиотека | Назначение | Ключевые возможности |
|---|---|---|
| Pandas | Табличные данные | DataFrame, фильтрация, группировка, объединение таблиц |
| NumPy | Числовые вычисления | Многомерные массивы, векторные операции, линейная алгебра |
| Matplotlib | Визуализация | Линейные графики, гистограммы, диаграммы рассеяния |
| Seaborn | Визуализация | Статистические графики, тепловые карты, улучшенный стиль |
| Plotly | Интерактивная визуализация | Веб-графики, анимация, дашборды |
Типичные задачи здесь - очистка и преобразование сырых данных, статистический анализ (среднее, медиана, корреляция), визуализация трендов и распределений, подготовка данных для машинного обучения. К примеру, аналитики в Spotify используют Pandas для обработки данных о прослушиваниях, чтобы формировать рекомендации.
Машинное обучение и искусственный интеллект
Python доминирует в области ML/AI благодаря богатой экосистеме специализированных библиотек.
| Фреймворк | Уровень | Сценарии использования |
|---|---|---|
| Scikit-learn | Классическое ML | Классификация, регрессия, кластеризация, предобработка данных |
| TensorFlow | Глубокое обучение | Продакшн-развёртывание, мобильные устройства, TPU-ускорение |
| PyTorch | Глубокое обучение | Научные исследования, динамические вычислительные графы |
| Keras | Высокоуровневый | Быстрое прототипирование нейросетей поверх TensorFlow |
| Transformers | NLP | Предобученные модели языка (BERT, GPT), обработка текста |
Типичные задачи здесь - классификация изображений и текста, прогнозирование временных рядов (продажи, цены), генерация контента (текст, изображения), анализ тональности отзывов. К примеру, Tesla использует PyTorch для разработки алгоритмов автопилота.
Автоматизация и DevOps
Python хорош для написания скриптов, упрощающих рутинные задачи системного и прикладного администрирования.
Примеры:
- Массовое переименование файлов (os, pathlib).
- Обработка CSV/JSON/XML (csv, json, xml.etree).
- Архивация и копирование (shutil, zipfile).
- Управление инфраструктурой: Ansible (написан на Python).
- Парсинг веб-страниц: Scrapy, BeautifulSoup, requests.
- CI/CD: запуск тестов, деплой, проверка зависимостей.
- Мониторинг: сбор метрик CPU/RAM (psutil), проверка доступности сайтов (requests, ping3).
| Категория | Библиотека | Применение |
|---|---|---|
| Файловая система | os, pathlib | Навигация по директориям, создание путей, проверка существования |
| Работа с форматами | csv, json, xml.etree | Чтение и запись структурированных данных |
| Архивация | shutil, zipfile | Копирование, перемещение, сжатие файлов |
| Веб-запросы | requests | HTTP-запросы, работа с API, загрузка ресурсов |
| Парсинг | BeautifulSoup, Scrapy | Извлечение данных из HTML, краулинг сайтов |
| Системная информация | psutil | Мониторинг ресурсов: процессор, память, сеть |
Скрипт на Python может каждый день скачивать отчёты с API, конвертировать их в Excel и отправлять по почте — без участия человека.
Графические интерфейсы (GUI)
Несмотря на то, что Python не является основным языком для GUI, он предлагает несколько надёжных решений для создания десктопных приложений.
| Библиотека | Технология | Преимущества | Ограничения |
|---|---|---|---|
| Tkinter | Встроенная | Простота, не требует установки дополнительных пакетов | Устаревший внешний вид, ограниченные возможности |
| PyQt / PySide | Qt | Современный интерфейс, богатый набор виджетов | Лицензионные нюансы, больший размер приложения |
| Kivy | OpenGL | Кроссплатформенность включая мобильные устройства | Специфический подход к разработке, крутая кривая обучения |
Типичные задачи в части GUI - создание внутренних утилит для бизнеса, интерфейсы для аналитических инструментов, обучающие программы и игры. К примеру, VLC Media Player частично использует PyQt для своих инструментов настройки.
А разработка игр?
Хотя Python не предназначен для AAA-игр, он подходит для обучения, прототипирования и 2D-игр.
| Инструмент | Тип | Поддерживаемые платформы | Сложность освоения |
|---|---|---|---|
| Pygame | 2D-движок | Windows, Linux, macOS | Низкая |
| Arcade | 2D-движок | Windows, Linux, macOS | Низкая |
| Godot | Полноценный движок | Все основные платформы + мобильные | Средняя |
Так можно обучаться основам гейм-дева, создавать головоломки, арканоиды, змейки, демо-проекты, мини-игры. К примеру, игра Battlefield 2 использовала Python для скриптования поведения персонажей и управления сетью.
Научные вычисления
Python широко применяется в науке, инженерии и математике благодаря точным и производительным библиотекам.
| Библиотека | Область | Возможности |
|---|---|---|
| NumPy | Общие вычисления | Массивы, матричные операции, генерация случайных чисел |
| SciPy | Научные алгоритмы | Оптимизация, интегрирование, обработка сигналов |
| SymPy | Символьная математика | Аналитические вычисления, упрощение выражений |
| Astropy | Астрономия | Работа с астрономическими данными, координатные системы |
| Biopython | Биоинформатика | Анализ ДНК, работа с биологическими форматами |
Типичные задачи здесь это моделирование физических процессов, обработка экспериментальных данных, решение дифференциальных уравнений, анализ сигналов (звук, ЭЭГ). К примеру, NASA использует Python для обработки данных с космических аппаратов.